home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3.2 / Ham Radio Version 3.2 (Chestnut CD-ROMs)(1993).ISO / packet / n17jsrc / files.c < prev    next >
C/C++ Source or Header  |  1991-05-03  |  10KB  |  266 lines

  1. /* System-dependent definitions of various files, spool directories, etc */
  2. /* Mods by PA0GRI */
  3. #include <stdio.h>
  4. #include "global.h"
  5. #include "netuser.h"
  6. #include "files.h"
  7.  
  8. #ifdef    MSDOS
  9. char *Startup    = "/autoexec.nos";        /* Initialization file */
  10. char *Userfile    = "/ftpusers";            /* Authorized FTP users and passwords */
  11. char *Hostfile    = "/net.rc";            /* hosts and passwords */
  12. char *Maillog    = "/spool/mail.log";        /* mail log */
  13. char *Mailspool    = "/spool/mail";        /* Incoming mail */
  14. char *Mailqdir    = "/spool/mqueue";        /* Outgoing mail spool */
  15. char *Mailqueue    = "/spool/mqueue/*.wrk";    /* Outgoing mail work files */
  16. char *Routeqdir    = "/spool/rqueue";        /* queue for router */
  17. char *Alias    = "/alias";            /* the alias file */
  18. char *Dfile    = "/domain.txt";        /* Domain cache */
  19. char *Fdir    = "/finger";            /* Finger info directory */
  20. char *Arealist    = "/spool/areas";        /* List of message areas */
  21. char *Helpdir    = "/spool/help";        /* Mailbox help file directory */
  22. char *Rewritefile = "/spool/rewrite";        /* Address rewrite file */
  23. char *Signature    = "/spool/signatur";        /* Mail signature file directory */
  24. char *Popusers    = "/popusers";            /* POP user and password file */
  25. char *Newsdir    = "/spool/news";        /* News messages and NNTP data */
  26. char *Forwardfile = "/spool/forward.bbs";    /* Mail forwarding file */
  27. char *Historyfile = "/spool/history";        /* Message ID history file */
  28. char *Netromfile = "/netrom.sav";        /* Netrom node save file */
  29. char Eol[]    = "\r\n";
  30. #define    SEPARATOR    "/"
  31. #endif
  32.  
  33. #ifdef    UNIX
  34. char *Startup    = "./startup.nos";        /* Initialization file */
  35. char *Config    = "./config.nos";        /* Device configuration list */
  36. char *Hostfile    = "./net.rc";            /* hosts and passwords */
  37. char *Userfile    = "./ftpusers";
  38. char *Mailspool    = "./mail";
  39. char *Maillog    = "./mail.log";            /* mail log */
  40. char *Mailqdir    = "./mqueue";
  41. char *Mailqueue    = "./mqueue/*.wrk";
  42. char *Routeqdir    = "./rqueue";            /* queue for router */
  43. char *Alias    = "./alias";            /* the alias file */
  44. char *Dfile    = "./domain.txt";        /* Domain cache */
  45. char *Fdir    = "./finger";            /* Finger info directory */
  46. char *Arealist    = "./areas";            /* List of message areas */
  47. char *Helpdir    = "./help";            /* Mailbox help file directory */
  48. char *Rewritefile = "./rewrite";        /* Address rewrite file */
  49. char *Signature    = "./signatur";            /* Mail signature file directory */
  50. char *Popusers    = "./popusers";            /* POP user and password file */
  51. char *Newsdir    = "./news";            /* News messages and NNTP data */
  52. char *Forwardfile = "./forward.bbs";        /* Mail forwarding file */
  53. char *Historyfile = "./history";        /* Message ID history file */
  54. char *Netromfile = "./netrom.sav";        /* Netrom node save file */
  55. char Eol[]    = "\n";
  56. #define    SEPARATOR    "/"
  57. #endif
  58.  
  59. #ifdef    AMIGA
  60. char *Startup    = "TCPIP:nos-startup";
  61. char *Config    = "TCPIP:config.nos";        /* Device configuration list */
  62. char *Hostfile    = "TCPIP:net.rc";        /* hosts and passwords */
  63. char *Userfile    = "TCPIP:ftpusers";
  64. char *Mailspool    = "TCPIP:spool/mail";
  65. char *Maillog    = "TCPIP:spool/mail.log";
  66. char *Mailqdir    = "TCPIP:spool/mqueue";
  67. char *Mailqueue    = "TCPIP:spool/mqueue/#?.wrk";
  68. char *Routeqdir    = "TCPIP:spool/rqueue";        /* queue for router */
  69. char *Alias    = "TCPIP:alias";        /* the alias file */
  70. char *Dfile    = "TCPIP:domain.txt";        /* Domain cache */
  71. char *Fdir    = "TCPIP:finger";        /* Finger info directory */
  72. char *Arealist    = "TCPIP:spool/areas";        /* List of message areas */
  73. char *Helpdir    = "TCPIP:spool/help";        /* Mailbox help file directory */
  74. char *Rewritefile = "TCPIP:spool/rewrite";    /* Address rewrite file */
  75. char *Signature    = "TCPIP:spool/signatur";    /* Mail signature file directory */
  76. char *Popusers    = "TCPIP:/popusers";        /* POP user and password file */
  77. char *Newsdir    = "TCPIP:/spool/news";        /* News messages and NNTP data */
  78. char *Forwardfile = "TCPIP:spool/forward.bbs";    /* Mail forwarding file */
  79. char *Historyfile = "TCPIP:spool/history";    /* Message ID history file */
  80. char *Netromfile = "TCPIP:/netrom.sav";        /* Netrom node save file */
  81. char Eol[]    = "\r\n";
  82. #define    SEPARATOR    "/"
  83. #endif
  84.  
  85. #ifdef    MAC
  86. char *Startup    ="Mikes Hard Disk:nos.start";
  87. char *Config    = "Mikes Hard Disk:config.nos";    /* Device configuration list */
  88. char *Hostfile    = "Mikes Hard Disk:net.rc";    /* hosts and passwords */
  89. char *Userfile    = "Mikes Hard Disk:ftpusers";
  90. char *Mailspool    = "Mikes Hard Disk:spool:mail:";
  91. char *Maillog    = "Mikes Hard Disk:spool:mail.log:";
  92. char *Mailqdir    = "Mikes Hard Disk:spool:mqueue:";
  93. char *Mailqueue    = "Mikes Hard Disk:spool:mqueue:*.wrk";
  94. char *Routeqdir    = "Mikes Hard Disk:spool/rqueue:";    /* queue for router */
  95. char *Alias    = "Mikes Hard Disk:alias";        /* the alias file */
  96. char *Dfile    = "Mikes Hard Disk:domain:txt";        /* Domain cache */
  97. char *Fdir    = "Mikes Hard Disk:finger";        /* Finger info directory */
  98. char *Arealist    = "Mikes Hard Disk:spool/areas";    /* List of message areas */
  99. char *Helpdir    = "Mikes Hard Disk:spool/help";        /* Mailbox help file directory */
  100. char *Rewritefile = "Mikes Hard Disk:spool/rewrite";    /* Address rewrite file */
  101. char *Signature    = "Mikes Hard Disk:spool/signatur";    /* Mail signature file directory */
  102. char *Popusers    = "Mikes Hard Disk:/popusers";        /* POP user and password file */
  103. char *Newsdir    = "Mikes Hard Disk:/spool/news";    /* News messages and NNTP data */
  104. char *Forwardfile = "Mikes Hard Disk:spool/forward.bbs"; /* Mail forwarding file */
  105. char *Historyfile = "Mikes Hard Disk:spool/history";    /* Message ID history file */
  106. char *Netromfile = "/Mikes Hard Disk:netrom.sav";    /* Netrom node save file */
  107. char Eol[]    = "\r";
  108. #define    SEPARATOR    ":"
  109. #endif
  110.  
  111. static char *rootdir = "";
  112.  
  113. /* Establish a root directory other than the default. Can only be called
  114.  * once, at startup time
  115.  */
  116. void
  117. initroot(root)
  118. char *root;
  119. {
  120.     rootdir = strdup( root );
  121.  
  122.     Startup = rootdircat(Startup);
  123.     Userfile = rootdircat(Userfile);
  124.     Hostfile = rootdircat(Hostfile);
  125.     Maillog = rootdircat(Maillog);
  126.     Mailspool = rootdircat(Mailspool);
  127.     Mailqdir = rootdircat(Mailqdir);
  128.     Mailqueue = rootdircat(Mailqueue);
  129.     Routeqdir = rootdircat(Routeqdir);
  130.     Alias = rootdircat(Alias);
  131.     Dfile = rootdircat(Dfile);
  132.     Fdir = rootdircat(Fdir);
  133.     Arealist = rootdircat(Arealist);
  134.     Helpdir = rootdircat(Helpdir);
  135.     Rewritefile = rootdircat(Rewritefile);
  136.     Signature = rootdircat(Signature);
  137.     Popusers = rootdircat(Popusers);
  138.     Newsdir = rootdircat(Newsdir);
  139.     Forwardfile = rootdircat(Forwardfile);
  140.     Historyfile = rootdircat(Historyfile);
  141.     Netromfile = rootdircat(Netromfile);
  142. }
  143.  
  144. /* Concatenate root, separator and arg strings into a malloc'ed output
  145.  * buffer, then remove repeated occurrences of the separator char
  146.  */
  147. char *
  148. rootdircat(filename)
  149. char *filename;
  150. {
  151.     char *out = filename;
  152.  
  153.     if(strlen(rootdir) > 0){
  154.         char *separator = SEPARATOR;
  155.         out = mallocw(strlen(rootdir)
  156.             + strlen(separator)
  157.             + strlen(filename) +1);
  158.         strcpy(out,rootdir);
  159.         strcat(out,separator);
  160.         strcat(out,filename);
  161.         if(*separator != '\0'){
  162.             char *p1, *p2;
  163.         /* Remove any repeated occurrences */
  164.             p1 = p2 = out;
  165.             while(*p2 != '\0'){
  166.                 *p1++ = *p2++;
  167.                 while(p2[0] == p2[-1] && p2[0] == *separator)
  168.                     p2++;
  169.             }
  170.             *p1 = '\0';
  171.         }
  172.     }
  173.     return out;
  174. }
  175.  
  176.  
  177. /* Subroutine for logging in the user whose name is name and password is pass.
  178.    The buffer path should be long enough to keep a line from the userfile.
  179.    If pwdignore is true, the password check will be overridden.
  180.    The return value is the permissions field or -1 if the login failed.
  181.    Path is set to point at the path field, and pwdignore will be true if no
  182.    particular password was needed for this user.
  183.  */
  184. int
  185. userlogin(name,pass,path,len,pwdignore)
  186. char *name;
  187. char *pass;
  188. char **path;
  189. int len;            /* Length of buffer pointed at by *path */
  190. int *pwdignore;
  191. {
  192.     char *cp,*cp1;
  193.     FILE *fp;
  194.     char *anonymous = NULLCHAR;
  195.     int anony,perm;
  196.  
  197.     if((fp = fopen(Userfile,READ_TEXT)) == NULLFILE)
  198.         /* Userfile doesn't exist */
  199.         return -1;
  200.     while(fgets(*path,len,fp),!feof(fp)){
  201.         if(*path[0] == '#')
  202.             continue;    /* Comment */
  203.         if((cp = strchr(*path,' ')) == NULLCHAR)
  204.             /* Bogus entry */
  205.             continue;
  206.         *cp++ = '\0';        /* Now points to password */
  207.         if(stricmp(name,*path) == 0)
  208.             break;        /* Found user name */
  209.         if(stricmp("anonymous",*path) == 0)
  210.             anonymous = strdup(cp);    /* remember their anon entry */
  211.     }
  212.     if((anonymous == NULLCHAR) && (feof(fp))){
  213.         /* User name not found in file, nor was anonymous */
  214.         fclose(fp);
  215.         return -1;
  216.     }
  217.     if(feof(fp)){
  218.         /* restore anonymous to the buffer */
  219.         strcpy(cp = *path, anonymous);
  220.     }
  221.     fclose(fp);
  222.     /* Look for space after password field in file */
  223.     if((cp1 = strchr(cp,' ')) == NULLCHAR)
  224.         /* Invalid file entry */
  225.         return -1;
  226.     *cp1++ = '\0';    /* Now points to path field */
  227.     anony = *pwdignore;
  228.     if(strcmp(cp,"*") == 0)
  229.         anony = 1;    /* User ID is password-free */
  230.     if(!anony && strcmp(cp,pass) != 0)
  231.         /* Password required, but wrong one given */
  232.         return -1;
  233.     if((cp = strchr(cp1,' ')) == NULLCHAR)
  234.         /* Permission field missing */
  235.         return -1;
  236.     *cp++ = '\0';    /* now points to permission field */
  237.     perm = atoi(cp);
  238. #if   defined(AMIGA)
  239.     /*
  240.      * Well, on the Amiga, a file can be referenced by many names:
  241.      * device names (DF0:) or volume names (My_Disk:).  This hunk of code
  242.      * passed the pathname specified in the ftpusers file, and gets the
  243.      * absolute path copied into the user's buffer.  We really should just
  244.      * allocate the buffer and return a pointer to it, since the caller
  245.      * really doesn't have a good idea how long the path string is..
  246.      */
  247.     cp1 = pathname("", cp1);
  248.     if (cp1)
  249.         strcpy(*path, cp1);
  250.     else
  251.         **path = '\0';
  252.     free(cp1);
  253. #else
  254.     strcpy(*path,cp1);
  255.     /* Convert any backslashes to forward slashes, for backward
  256.      * compatibility with the old NET
  257.      */
  258.     while((cp = strchr(*path,'\\')) != NULLCHAR)
  259.         *cp = '/';
  260. #endif
  261.     *pwdignore = anony;
  262.     /* Finally return the permission bits */
  263.     return perm;
  264. }
  265.     
  266.